package com.example.demo.huawei;

/**
 * 将字符串加倍，以便处理环形结构。
 * 遍历所有可能的子字符串，检查每个子字符串中 l、o 和 x 出现的次数。
 * 找到满足条件的最长子字符串。
 * <p>
 * 双倍字符串：将字符串拼接成两倍长的形式，以便处理环形结构。
 * 嵌套循环：外层循环遍历所有可能的起点，内层循环遍历从当前起点开始的所有终点。
 * 字符计数：在内层循环中，统计当前子字符串中 l、o 和 x 的出现次数。
 * 检查条件：检查 l、o 和 x 的出现次数是否都是偶数，如果是，则更新最大长度。
 */
public class LongestEvenSubstring {
    public static int findLongestEvenSubstring(String s) {
        int n = s.length();
        String doubled = s + s;
        int maxLength = 0;

        // 遍历所有起点
        for (int start = 0; start < n; start++) {
            int countL = 0;
            int countO = 0;
            int countX = 0;

            // 遍历所有终点
            for (int end = start; end < start + n; end++) {
                char c = doubled.charAt(end);
                if (c == 'l') countL++;
                if (c == 'o') countO++;
                if (c == 'x') countX++;

                // 检查 l, o, x 的出现次数是否都是偶数
                if (countL % 2 == 0 && countO % 2 == 0 && countX % 2 == 0) {
                    maxLength = Math.max(maxLength, end - start + 1);
                }
            }
        }

        return maxLength;
    }

    public static void main(String[] args) {
        System.out.println(findLongestEvenSubstring("alolobo")); // 6
        System.out.println(findLongestEvenSubstring("looxdolx")); // 7
        System.out.println(findLongestEvenSubstring("bcbcbc")); // 6
    }
}
